package pe.gob.foncodes.ssa.web.controller;

import java.util.List;
import java.util.ArrayList;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;
import pe.gob.foncodes.ssa.bs.administracion.controller.GenericMaintenanceController;
import pe.gob.foncodes.ssa.bs.common.util.Constante;
import pe.gob.foncodes.ssa.bs.seguridad.domain.Conexion;
import pe.gob.foncodes.ssa.bs.seguridad.domain.ControlAcceso;

public class ConexionController extends GenericMaintenanceController {
    protected static Logger log = Logger.getLogger(ConexionController.class);
    
    private List<Conexion> lstConexiones = new ArrayList<Conexion>();
    private Conexion selectedConexion= new Conexion();
    private String txtBusDatabase;
    private boolean esNuevo;
    private boolean BMuestraPass;
    
    @Override
    public void init() {
        selectedConexion = null;
        esNuevo = false;
        lstConexiones = new ArrayList<Conexion>();
        setBeanList(lstConexiones);
    }

    public void searchConexion() throws Exception{
        if(this.txtBusDatabase == null)
            this.txtBusDatabase = "";
        String stxtBusDatabase = "%" + this.txtBusDatabase.toUpperCase() + "%";
        lstConexiones = getService().findByNamedQuery("Conexion.findByTxtDatabase", new Object[]{stxtBusDatabase});
        setBeanList(lstConexiones);
        selectedConexion = null;
    }
    
    public void limpiar(){
        this.txtBusDatabase = "";
        lstConexiones = new ArrayList<Conexion>();
        setBeanList(lstConexiones);
        selectedConexion = null;
    }
    
    public void nuevo(){
        RequestContext context = RequestContext.getCurrentInstance();
        esNuevo = true;
        Conexion conexion= new Conexion();
        conexion.setTxtLogpass("");
        setBean(conexion);
        BMuestraPass = false;
        context.execute("editarContenido.show()");
    }
    
    public void verDetallesConexion(){
        RequestContext Rcontext = RequestContext.getCurrentInstance();
        if(this.selectedConexion == null){
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", "Debe seleccionar un registro"));
            esNuevo = false;
        }else{
            esNuevo = false;
            BMuestraPass = false;
            setBean(selectedConexion);
            Rcontext.execute("editarContenido.show()");
        }
    }
    
    public void saveConexion(ActionEvent event) throws Exception {
        RequestContext context = RequestContext.getCurrentInstance();
        ControlAcceso control = ((ControlAcceso) getSpringBean(Constante.SESSION_ACCESO));
        Conexion conexion =(Conexion)getBean();
        conexion.setNIdCtrlAccesoWeb(control.getId());
        setBean(conexion);
        try {
            //Nuevo
            if(esNuevo){
                if (validate()) {
                    super.beforeSave(event);
                    super.doSave(event);
                    afterSave(event);
                    context.execute("editarContenido.hide()");
                }
            //Modificar
            }else{
                if (validate()) {
                    super.beforeUpdate(event);
                    super.doUpdate(event);
                    afterUpdate(event);
                    context.execute("editarContenido.hide()");
                }
            }
        } catch (Exception e) {
            log.error("ERROR EN saveConexion: "+e);
        }
    }
    
    @Override
    public void afterSave(ActionEvent event) throws Exception {
        esNuevo = false;
        setMessageSuccess("Se creo la conexión satisfactoriamente.");
        log.info("End of Transaction: 'Save'");
    }
    
    @Override
    public void afterUpdate(ActionEvent event) throws Exception {
        setMessageSuccess("El registro se actualizó satisfactoriamente.");
        log.info("End of Transaction: 'Update'");
    }
    
    @Override
    public boolean validate() throws Exception{
        boolean success = true;
        
        Conexion conexion = (Conexion)getBean();
        if (conexion.getTxtConexion() == null ){
            conexion.setTxtConexion("");
        }
        if(conexion.getTxtConexion().trim().equals("")){
            setMessageError(new Exception("Se debe ingresar el nombre de la Conexion."));
            success = false;
            return success;
        }
        
        if (conexion.getTxtServername() == null ){
            conexion.setTxtServername("");
        }
        if(conexion.getTxtServername().trim().equals("")){
            setMessageError(new Exception("Se debe ingresar el nombre del Servidor."));
            success = false;
            return success;
        }
        
        if (conexion.getTxtDatabase() == null ){
            conexion.setTxtDatabase("");
        }
        if(conexion.getTxtDatabase().trim().equals("")){
            setMessageError(new Exception("Se debe ingresar el nombre de la base de datos."));
            success = false;
            return success;
        }
        
        if (conexion.getTxtLogid() == null ){
            conexion.setTxtLogid("");
        }
        if(conexion.getTxtLogid().trim().equals("")){
            setMessageError(new Exception("Se debe ingresar el loginId de la base de datos."));
            success = false;
            return success;
        }
        
        if (conexion.getTxtLogpass() == null ){
            conexion.setTxtLogpass("");
        }
        if(conexion.getTxtLogpass().trim().equals("")){
            setMessageError(new Exception("Se debe ingresar la Contraseña de la base de datos."));
            success = false;
            return success;
        }
        
        return success;
    }
    
    public List<Conexion> getLstConexiones() {
        return lstConexiones;
    }

    public void setLstConexiones(List<Conexion> lstConexiones) {
        this.setLstConexiones(lstConexiones);
    }

    public Conexion getSelectedConexion() {
        return selectedConexion;
    }
    
    public void setSelectedConexion(Conexion selectedConexion) {
        this.selectedConexion = selectedConexion;
    }

    public String getTxtBusDatabase() {
        return txtBusDatabase;
    }

    public void setTxtBusDatabase(String txtBusDatabase) {
        this.txtBusDatabase = txtBusDatabase;
    }

    public boolean isBMuestraPass() {
        return BMuestraPass;
    }

    public void setBMuestraPass(boolean BMuestraPass) {
        this.BMuestraPass = BMuestraPass;
    }
    
    public void muestraContrsena(){
        Conexion conexion =(Conexion)getBean();
        if(conexion.getTxtLogpass()==null){
            conexion.setTxtLogpass("");
        }
        setBean(conexion);
    }

    public boolean isEsNuevo() {
        return esNuevo;
    }

    public void setEsNuevo(boolean esNuevo) {
        this.esNuevo = esNuevo;
    }
    
}